﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ProyectoSelva.Const;
using ProyectoSelva.Daos;
using ProyectoSelva.Entities; 

namespace ProyectoSelva.Forms.Mantenimiento
{
    public partial class FrmMantenimientoEntidadGenericaHelper<T> : FrmMantenimientoEntidadGenerica where T : EntidadGenerica,new()
    {

     //   private FrmCrearEntidadGenerica<T> frmCrearEntidadGenerica;

       

        protected EntidadGenericaDAO<T> DAO;
        private IList<T> listaEntidadGenerica;
         
        public FrmMantenimientoEntidadGenericaHelper(Form mdiParent)
        {
            
            Visible = false;
            MdiParent = mdiParent;
            DAO = new EntidadGenericaDAO<T>();
            dGridResultado.AutoGenerateColumns = false;

            ActualizarLista();
           // frmActualizarEntidadGenerica = new FrmActualizarEntidadGenerica<T>();
            //frmActualizarEntidadGenerica.DAO = this.DAO;
        }

        private IList<T> ActualizarLista()
        {
            IList<T> lista = DAO.ListarActivos();

            dGridResultado.DataSource = lista;

            if(lista != null)
            {
                return lista;
            }
            return new List<T>();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
           
            listaEntidadGenerica = DAO.ListarTodos();
        }

        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            e.Cancel = true;
            Hide();
        }

        protected override void tStripButtonCrear_Click(object sender, System.EventArgs e)
        {
           // frmCrearEntidadGenerica.ShowDialog(this);

            var form = new FrmCrearEntidadGenerica<T>(new T(), DAO);
            form.CadenaDescriptivaEntidad = this.CadenaDescriptivaEntidad;
            form.ShowDialog(this);
            ActualizarLista();
        }

        protected override void tStripButtonModificar_Click(object sender, System.EventArgs e)
        {
            // frmCrearEntidadGenerica.ShowDialog(this);
            if (dGridResultado.CurrentRow == null)
            {
                return;
            }

            var entidadGenerica = (EntidadGenerica)dGridResultado.CurrentRow.DataBoundItem;
            var form = new FrmCrearEntidadGenerica<T>(entidadGenerica, DAO)
                           {
                               Text = @"Modificación de {0}",
                               CadenaDescriptivaEntidad = this.CadenaDescriptivaEntidad
                           };
            form.DeshabilitarEdicionDeCodigo();
            form.ShowDialog(this);
            ActualizarLista();
        }


        protected override void tStripButtonEliminar_Click(object sender, EventArgs e)
        {
            if (dGridResultado.CurrentRow == null)
            {
                return;
            }

            var entidadGenerica = (EntidadGenerica)dGridResultado.CurrentRow.DataBoundItem;
            entidadGenerica.Estado = Estado.Inactivo;
            DAO.Update(entidadGenerica as T);
            ActualizarLista();
        }

    }
}
